uniform sampler2D Texture0;
uniform sampler2D hatch0;   // textura con  las rayas, en principio pensado para algo en blanco y negro
uniform float time;
uniform float distort;   // -1 a 1 mas o menos, controla el rango del blur
uniform float cut;       // 14 corte para zonas negras
uniform vec2 v1;         // 3.12, 0.46 : vector para controlar el tamaño de las rayas
uniform vec2 v2;         // 0.8, 0 : vector para controlar el tamaño de las rayas
uniform float ForStep;   // 0.25 : cuanto mas bajo mas precision en el blur NO USAR 0

uniform vec3 power;

varying vec2 texCoord;

void main(void)
   {
   vec2 uv = texCoord;

  float distort2 = distort*0.01;

   vec4 r = vec4(0,0,0,0);
   float n = 0.0;
   for (float x = -1.0; x <= 1.0; x = x + ForStep)
      for (float y = -1.0; y <= 1.0; y = y + ForStep)
         {
         vec4 val = texture2D( Texture0, uv+vec2(x*0.01,y*distort2) );
         if (val.z > 0.01*cut)
            {
            val.x = val.x * power.x;
            val.y = val.y * power.y;
            val.z = val.z * power.z;
            r+=val;
            n+=1.0;
            }
           else
           {
           float k = val.z/(0.01*cut);
            val.x = val.x * power.x*k;
            val.y = val.y * power.y*k;
            val.z = val.z * power.z*k;
            r+=val;

            n+=1.0;
           }
         }

	vec4 k = (
	vec4(1.0,1.0,1.0,1.0)
	-vec4
		(
		(texture2D(Texture0, uv.yx/3.0+vec2(time*v1.x,time*v1.y)))
		-(texture2D(hatch0, uv.yx/0.3+vec2(time*v2.x,time*v1.y)))
		)
	)*0.9;

   gl_FragColor = r/n*k+k*0.05;
   }